package cc.rengu.igas.bsps.core.realize;

import cc.rengu.igas.bsps.common.entity.MchntBindInfo;
import cc.rengu.igas.bsps.common.entity.RoleAcctInfo;
import cc.rengu.igas.share.common.enums.SettleAcctTypeEnum;

import java.util.List;

/**
 * 商户及应用检查组件服务
 */
public interface PublicDealService {
    /**
     * 检查当前用户是否拥有操作权限
     *
     * @param instId   机构标识
     * @param mchntNo  商户号
     * @param userId   操作人用户标识
     * @param opUserId 操作信息关联人
     * @return 是否拥有权限
     */
    Boolean checkUserOpAuth(String instId, String mchntNo, String userId, String opUserId) throws Exception;

    /**
     * 获取机构内部户
     * 提现/D0（本行）： 本行渠道户->商户结算账户
     * 提现/D0（他行）： 本行垫资户->商户结算账户
     * 充值（本行）：    消费卡号->本行渠道户
     *
     * @param instId     机构号
     * @param settleAcct 科目/账号标识  SettleAcctTypeEnum （待清算款，应付商户款，..）
     * @throws Exception 异常
     */
    RoleAcctInfo getInnerAccountByCondition(String instId, SettleAcctTypeEnum settleAcct) throws Exception;


    /**
     * 检查商户黑名单
     *
     * @param instId  机构号
     * @param mchntNo 商户号
     */
    void checkMchntBlackInfo(String instId, String mchntNo) throws Exception;

    /**
     * 收银员列表查询
     *
     * @param instId  机构号
     * @param mchntNo 商户号
     * @param userId  用户标识
     * @throws Exception 异常
     */
    List<MchntBindInfo> mchntCashierListQuery(String instId, String mchntNo, String userId) throws Exception;

    /**
     * 查询经营范围名称
     *
     * @param manageScopeCode 经营范围编码
     */
    String getManageScope(String manageScopeCode) throws Exception;

    /**
     * 查询行政区划名称
     *
     * @param regionCode 行政区划编码
     */
    String getRegionName(String regionCode) throws Exception;

    /**
     * 检查当前用户是否拥有操作设置查询订单权限
     *
     * @param instId   机构标识
     * @param mchntNo  商户号
     * @param userId   操作人用户标识
     * @param opUserId 操作信息关联人
     * @return 是否拥有权限
     */
    Boolean checkUserOpAuthTransInfoQuery(String instId, String mchntNo, String userId, String opUserId) throws Exception;

}
